for (i = 0; i < sig->n_args; i++)
{
if (sig->args[i].arg_type == GTK_BINDING_ARG_STRING)
- g_free (sig->args[i].d.pointer_data);
+ g_free (sig->args[i].d.string_data);
}
g_free (sig->args);
g_free (sig->signal_name);
{
case GTK_BINDING_ARG_STRING:
if (params->type == GTK_TYPE_STRING)
- GTK_VALUE_STRING (*params) = args->d.pointer_data;
+ GTK_VALUE_STRING (*params) = args->d.string_data;
else
valid = FALSE;
break;
arg->d.double_data = tmp_arg->d.double_data;
break;
case GTK_BINDING_ARG_STRING:
- if (!tmp_arg->d.pointer_data)
+ if (!tmp_arg->d.string_data)
{
g_warning ("gtk_binding_entry_add_signall(): value of `string' arg[%u] is `NULL'", n);
- arg->d.pointer_data = NULL;
+ arg->d.string_data = NULL;
binding_signal_free (signal);
return;
}
- arg->d.pointer_data = g_strdup (tmp_arg->d.pointer_data);
+ arg->d.string_data = g_strdup (tmp_arg->d.string_data);
break;
default:
g_warning ("gtk_binding_entry_add_signall(): unsupported type `%s' for arg[%u]",
arg->d.double_data = va_arg (args, gdouble);
break;
case GTK_BINDING_ARG_STRING:
- arg->d.pointer_data = va_arg (args, gchar*);
- if (!arg->d.pointer_data)
+ arg->d.string_data = va_arg (args, gchar*);
+ if (!arg->d.string_data)
{
g_warning ("gtk_binding_entry_add_signal(): value of `string' arg[%u] is `NULL'", i);
i = n_args + 2;
#include <string.h>
#include "gtkobject.h"
#include "gtktypeutils.h"
+#include "gtkcontainer.h"
#define TYPE_NODES_BLOCK_SIZE (200)
dest_arg->d = src_arg->d;
if (src_arg->type == GTK_TYPE_STRING)
- dest_arg->d.pointer_data = g_strdup (src_arg->d.pointer_data);
+ dest_arg->d.string_data = g_strdup (src_arg->d.string_data);
return dest_arg;
}
if (!node->klass && node->type_info.class_size)
{
node->klass = g_malloc0 (node->type_info.class_size);
-
+
if (node->parent_type)
{
GtkTypeNode *parent;
-
+
LOOKUP_TYPE_NODE (parent, node->parent_type);
if (!parent->klass)
gtk_type_class_init (parent);
-
+
if (parent->klass)
memcpy (node->klass, parent->klass, parent->type_info.class_size);
}
-
+
if (gtk_type_is_a (node->type, GTK_TYPE_OBJECT))
{
GtkObjectClass *object_class;
-
+
/* FIXME: this initialization needs to be done through
* a function pointer someday.
*/
object_class->signals = NULL;
object_class->nsignals = 0;
object_class->n_args = 0;
- }
+
+ if (gtk_type_is_a (node->type, GTK_TYPE_CONTAINER))
+ {
+ GtkContainerClass *container_class;
+ container_class = (GtkContainerClass*) object_class;
+
+ g_assert (node->type_info.class_size >= sizeof (GtkContainerClass));
+
+ container_class->n_args = 0;
+ }
+ }
+
/* class_init_func is used as data pointer for
* class_size==0 types
*/
gulong ulong_data;
gfloat float_data;
gdouble double_data;
+ gchar *string_data;
gpointer pointer_data;
+ GtkObject *object_data;
struct {
GtkCallbackMarshal marshal;
gpointer data;
#define GTK_VALUE_ULONG(a) ((a).d.ulong_data)
#define GTK_VALUE_FLOAT(a) ((a).d.float_data)
#define GTK_VALUE_DOUBLE(a) ((a).d.double_data)
-#define GTK_VALUE_STRING(a) ((a).d.pointer_data)
+#define GTK_VALUE_STRING(a) ((a).d.string_data)
#define GTK_VALUE_ENUM(a) ((a).d.int_data)
#define GTK_VALUE_FLAGS(a) ((a).d.int_data)
#define GTK_VALUE_BOXED(a) ((a).d.pointer_data)